/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package computacaografica;

import computacaografica.formas.GraphicsHeitor;
import computacaografica.formas.Oval;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/**
 *
 * @author Heitor
 */
public class Panel extends JPanel/* implements MouseListener */ {

    private static final long serialVersionUID = 1L;
    private FormasEnum forma;
    private Point posicao;

    public Panel() {

        this.setBackground(Color.WHITE);
        posicao = new Point();
        forma = FormasEnum.DEFAULT;
        //  this.addMouseListener(this);
    }

    public FormasEnum getForma() {
        return forma;
    }

    public void setForma(FormasEnum forma) {
        this.forma = forma;
    }

    @Override
    public void paint(Graphics g) {
        //LinkedList<Shape> lista = Janela.obj().listaFormas;
        Graphics2D g2 = (Graphics2D) g;
        g2.setBackground(Color.white);

        // if (lista.isEmpty()) {
        g2.setPaint(Color.white);
        g2.fillRect(0, 0, this.getWidth(), this.getHeight());
        //  }

        g2.setColor(Color.red);

        GraphicsHeitor gh = new GraphicsHeitor(g2);
        for (Shape shape : Janela.listaFormas) {
            gh.fill(shape);
    }
        //retira a ultima forma cisalha e depois adiciona native lista denovo. 
        if (Janela.obj().isTransladar()) {
            Shape sh = Janela.listaFormas.removeLast();
            Shape transladado = gh.Transladar(Janela.obj().getTransladarX(), Janela.obj().getTransladarY(), sh);
            g2.clearRect(0, 0, this.getWidth(), this.getHeight());
            Janela.listaFormas.addLast(transladado);
            for (Shape shape : Janela.listaFormas) {
                gh.fill(shape);
            }
            Janela.obj().setTransladar(false);
        }
//        //Retira a ultima forma cisalha e depois a adiciona denovo
//        if(Janela.obj().isCisalhar()){
//            Shape sh = Janela.obj().listaFormas.removeLast(); 
//            Shape cisalhado = gh.Cisalhar(Janela.obj().getCisalarX(), Janela.obj().getCisalarY(), sh);
//            g2.clearRect(0, 0, this.getWidth(), this.getHeight());
//            Janela.obj().listaFormas.addLast(cisalhado);
//            for (Shape shape : Janela.obj().listaFormas) {
//                gh.fill(shape);
//            }
//            Janela.obj().setCisalhar(false);
//        }
        //        //Retira a ultima forma cisalha e depois a adiciona denovo
    }

    public Point getPosicao() {
        return posicao;
    }

    public void setPosicao(Point posicao) {
        this.posicao = posicao;
    }
    /*
    @Override
    public void mouseClicked(MouseEvent e) {
    
    if(e.getSource() == this){
    this.setPosicao( new Point(e.getX(), e.getY()));
    this.repaint();
    }
    }
    
    @Override
    public void mousePressed(MouseEvent e) {
    //throw new UnsupportedOperationException("Not supported yet.");
    }
    
    @Override
    public void mouseReleased(MouseEvent e) {
    //por o método do cursor aki.
    }
    
    @Override
    public void mouseEntered(MouseEvent e) {
    //POR O método do cursor aki.
    }
    
    @Override
    public void mouseExited(MouseEvent e) {
    //throw new UnsupportedOperationException("Not supported yet.");
    }
    
     */
}
